package com.t2t.top.collections;

import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Map.Entry;

/**
 * Created by yangpengfei on 2017/2/9.
 * <p/>
 * 【推荐】 使用entrySet遍历Map类集合KV，而不是keySet方式进行遍历。
 * 【说明】 keySet其实是遍历了2次，一次是转为Iterator对象，另一次是从hashMap中取出key所对应的value。
 * 而entrySet只是遍历了一次就把key和value都放到了entry中，效率更高。如果是JDK8，使用Map.foreach方法。
 * 【正例】 values()返回的是V值集合，是一个list集合对象；keySet()返回的是K值集合，是一个Set集合对象；entrySet()返回的是K-V值组合集合。
 */
public class TestEntrySet {

    public static void main(String[] args) {
        Map<String, String> map = new HashMap<String, String>();
        map.put("1", "张三");
        map.put("2", "李四");
        map.put("3", "王五");
        /*方法一 ：迭代程序*/
        System.out.println("方法一：");
        Iterator iterator = map.entrySet().iterator();
        while (iterator.hasNext()) {
            Entry<String, String> entry = (Entry<String, String>) iterator.next();
            System.out.println("key:" + entry.getKey() + " value" + entry.getValue());
        }
        /*方法二*/
        System.out.println("方法二：");
        for (Entry<String, String> m : map.entrySet()) {
            System.out.println("key:" + m.getKey() + " value" + m.getValue());
        }

        /*方法三，尽量避免使用，一次是转换成iterator，一次是从map中取值*/
        for (String s : map.keySet()) {
            System.out.println("key:" + s + " value" + map.get(s));
        }
    }
}
